前一天我們介紹了用來資料處理最基本的pandas套件
那今天我們則是來談一下不同的檔案類型
我們都知道不同的檔案後綴表示不同的類型
但是面對那些txt, csv, tsv, xlsx, json, h5,....
分別是有些什麼樣子的差別呢?
txt
:文字檔案(text file)最最基本的檔案格式,除了文字以外就不包含其他東西了
而在python裡面的讀取方式則是直接用open()
開啟
# 讀取純文字檔案
text=""
with open("input.txt","r") as f:
text = f.read()
然後這邊用到了python的with
語法
這樣就在離開這個範圍的之後自動幫我們把檔案給close掉
會是更安全、簡便的一種讀取方式
當然,如果說我們要對資料在讀取的時候就依每列進行處理
可以在讀取的時候增加一個for迴圈就好,像是
# 逐行讀取
data = []
with open("input.txt","r") as f:
for line in f:
line = line.strip()
data.append(line.split(","))
csv
:逗號分割值(comma-separated values)如果有實際做過一些資料分析的話,那麼對這個格式應該不會很陌生
不過實際上為什麼要叫csv呢?其實這邊的c是指逗號(comma)的意思,而整個csv就是指透過逗號來分隔不同值的一種資料
因此其實csv仍然可以視為一種純文字檔案,而用純文字儲存的逗號分割資料也同樣可以轉換成csv來打開
以上面那個input.txt
為例子,我們將檔案名稱改成input.csv
之後
便發現可以用Excel等試算表軟體將其打開
但也因為是純文字儲存的資料
在儲存過程中不會包含每個格子的資料型態
因此處理csv檔案的時候要記得將讀取進來的str格式根據需求轉換成不同的其他格式
筆者一年前參加一個資料分析比賽的時候
主辦方提供了一個6.3G大小幾千萬筆資料的csv檔案
很多人甚至都沒辦法直接將這個檔案打開
那個時候我才知道原來Excel打開這些檔案的時候是有上限的
因此後來就直接用python來處理了(所以說python很棒的嘛)
- 列數和欄數上限: 1,048,576 列乘以 16,384 欄 (Excel 的規格及限制 (microsoft.com))
- 實際上資料還是在,只是Excel不會顯示而已
而看似這100多萬筆資料的範圍很大,但其實如果真的這樣儲存有時候還真的會超過
像是去年疫情的時候,就發生了英國少算逾1.5萬名武漢肺炎確診患者,疑因超過Excel限制 | iThome
tsv
:tab分割值(tab-separated values)與csv類似的,tsv其實就是換成了Tab
而已
其實更廣義來說,任何一種分割符號都可以稱作是tsv的檔案(空格、分號、...)
但讀取和儲存這些檔案的時候,要確保本來的資料是不會包含到這些分割符號的
不然很可能在讀取成表格的時候出現錯位的情形(事實上,有些資料的前處理還真的要處理這個部分,像是這個)
xlsx
:XML Spreadsheet這應該是現代Excel最常儲存的格式了
要說明它是什麼,就必須要提到XML——延伸標記式語言(Extensible Markup Language)
這種結構可以在儲存資訊的同時,定義整個資料的結構
因此如果儲存的時候希望包含了表格之間的字體、顏色、合併情況等格式的話,記得要用這種方式儲存
這邊以台灣政府開放資料平臺的110年9月分析陳情焦點議題前10大-依機關類別為例子
實際上xml裡面長這個樣子
<?xml version="1.0"?>
-<GISROOT>
-<RECORD>
<序號>1</序號>
<機關>衛生局</機關>
<陳情最多業務項目>急性傳染病防治</陳情最多業務項目>
<件數>907</件數>
<該業務占排名前十大百分比>19.21%</該業務占排名前十大百分比>
</RECORD>
-<RECORD>
<序號>2</序號>
<機關>衛生局</機關>
<陳情最多業務項目>食品業務</陳情最多業務項目>
<件數>395</件數>
<該業務占排名前十大百分比>8.37%</該業務占排名前十大百分比>
</RECORD>
... 中間省略 ...
</GISROOT>
json
:JavaScript Object Notationjson是一種透過純文字儲存的一種格式,而因為儲存的時候透過類似於一層一層字典的關係來將資料包起來,因此也很適合拿來儲存結構化的資料(事實上,在許多的網路行為中都是都過傳遞json格式來交換資料的)
以上面同一個例子,它在json的樣子長得則會像是
[
{
"序號": "1",
"機關": "衛生局",
"陳情最多業務項目": "急性傳染病防治",
"件數": "907",
"該業務占排名前十大百分比": "19.21%"
},
{
"序號": "2",
"機關": "衛生局",
"陳情最多業務項目": "食品業務",
"件數": "395",
"該業務占排名前十大百分比": "8.37%"
},
... 中間省略 ...
]
h5
:層級資料格式(Hierarchical Data Format:HDF)因為這個格式很常會被拿來儲存訓練好的模型,如果或多或少寫過一些深度學習模型的朋友,那應該有見過這個格式,不過有沒有疑惑過為什麼要儲存成這個格式呢?
h5其實是HDF5的意思,而HDF則是指層級資料格式(Hierarchical Data Format)
而HDF的推出其實是因為在不同的系統和機器中
對資料的一些處理經常會產生了許多用來輔助說明的信息
而這些信息又因為不同的格式而經常在需要打包傳遞的時候造成許多的困擾
因此HDF就將這些東西直接包含在檔案裡面,讓不同機器的程式可以透過統一的機制來調用裡面的資料
而也正因為這樣的特性,讓HDF在巨量資料的儲存上也非常合適哦
今天介紹了一些常見的檔案格式和它們背後的邏輯
這樣,以後在拿到資料看到檔案名稱的時候應該就會先對它大概的輪廓和處理流程有了一個概念了吧?
「筆者一年前參加一個資料分析比賽的時候...」我也是有一樣的經歷 Q_____Q
看來給出這種大型資料檔案的主辦方還不少呢?
我那個時候是剛好遇到國網中心在做活動有送免費的額度
於是就直接在上面開了一台256G內存的內存的VM硬幹XDDD